
import bpy

import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类
import Core.bl_UI配色 as UI配色

from 节点.全局控制.Node.数据编辑.物体 import bl_修改器公共选项

import engine.initLIB.load_dll as engineLib
import ctypes



engineLib.flexCAPI.f_创建附加细分修改器节点.restype = ctypes.c_bool







class C_Node_附加细分修改器(基类.C_Node_基类):
	bl_dname = 'bl_node_修改器_设置粒子数据'
	bl_label = '附加细分修改器'
	
	m_平滑 = bpy.props.BoolProperty(default=True)
	m_名称 = bpy.props.StringProperty(default='细分')

	m_是否渲染 = bpy.props.BoolProperty(default=True, update=bl_修改器公共选项.f_update_修改器可渲)
	m_是否显示 = bpy.props.BoolProperty(default=True, update=bl_修改器公共选项.f_update_修改器可视)

	def init(self, context):
		super(C_Node_附加细分修改器, self).f_init(context)
		self.inputs.new('C_Socket_物体_Array1D', name='物体')
		self.inputs.new('C_Socket_I32', name='视图细分级')
		self.inputs.new('C_Socket_I32', name='渲染细分级')
		
		self.f_toCPP()
		
	def f_toCPP(self):
		是否更新 = engineLib.flexCAPI.f_创建附加细分修改器节点(ctypes.c_wchar_p(self.id_data.name), ctypes.c_wchar_p(self.name), self.f_getPyObject());
		if 是否更新 :
			self.inputs['视图细分级'].f_update()
			self.inputs['渲染细分级'].f_update()
			
	def draw_buttons(self, context, layout):
		bl_修改器公共选项.f_可视选项绘制(self, layout)
		
		layout.prop(self, 'm_平滑', text='平滑')
		layout.prop(self, 'm_名称', text='名称')
	
	def f_update(self):
		物体 = self.inputs['物体'].f_getData()
		if len(物体) < 1:
			return

		视图细分级 = self.inputs['视图细分级'].f_getData()
		渲染细分级 = self.inputs['渲染细分级'].f_getData()
		#print('物体 = ', 物体)
		for obj in 物体:
			修改器ID = obj.modifiers.find(self.m_名称)
			if 修改器ID >= 0 :
				修改器 = obj.modifiers[修改器ID]
			else:
				修改器 = obj.modifiers.new(self.m_名称, 'SUBSURF')
				self.m_名称 = 修改器.name
				
			
			if self.m_平滑 :
				修改器.subdivision_type = 'CATMULL_CLARK'
			else:
				修改器.subdivision_type = 'SIMPLE'
			#print(修改器.subdivision_type, self.m_平滑)

			修改器.levels = 视图细分级
			修改器.render_levels = 渲染细分级
		

		
class C_NODE_MENU_附加细分修改器(bpy.types.Operator):
	bl_idname = 'node.global_node_set_obj_subdivision_mod'
	bl_label = '附加细分修改器'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_附加细分修改器', use_transform=True)
		return {'FINISHED'}



















classes = (
	C_Node_附加细分修改器,
	C_NODE_MENU_附加细分修改器,
	
)

def register():
	for c in classes:
		bpy.utils.register_class(c)
		
def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)




